'use strict';
module.exports.run = function(d,s){
    const bs = require("../module/base");
    switch(d[1]){
        case 1:{ //地图加载完成进入

            break;
        }case 2:{ //人物移动
            if(d[2].length != 3) return;
            let map = MAPLIST[s.U.mk];
            let sd = `[9,102,[${s.U.uid},${d[2][0]},${d[2][1]},${d[2][2]}]]`;
            for(let k in map.u){
                if(map.u[k].on && k != s.U.uid){
                    bs.sendUser(k, sd);
                }
            }
            let mu = map.u[s.U.uid];
            mu.lx = mu.x, mu.ly = mu.y, mu.lz = mu.z;
            mu.x = d[2][0], mu.y = d[2][1], mu.z = d[2][2];
            break;
        }case 3:{ //攻击物品
            if(d.length != 3) return;
            let map = MAPLIST[s.U.mk];
            if(d[2] in map.u && map.u[d[2]].PH > 0){
                let dis = Math.sqrt((map.u[s.U.uid].x-map.u[d[2]].x)*(map.u[s.U.uid].x-map.u[d[2]].x)+(map.u[s.U.uid].z-map.u[d[2]].z)*(map.u[s.U.uid].z-map.u[d[2]].z));
                if(dis < 5){ //判断距离
                    map.u[d[2]].PH--;
                    let sd = `[9,103,[${d[2]},${map.u[d[2]].PH}]]`;
                    for(let k in map.u){
                        if(map.u[k].on) bs.sendUser(k, sd);
                    }
                    if(map.u[s.U.uid].PH < 5){
                        map.u[s.U.uid].PH++;
                        sd = `[9,103,[${s.U.uid},${map.u[s.U.uid].PH}]]`;
                        for(let k in map.u){
                            if(map.u[k].on) bs.sendUser(k, sd);
                        }
                    } 
                    //判断游戏是否结束
                    return checkGame();
                }else{
                    LOG.error("dis", dis);
                }
            }
            //console.log(map.u[d[2]].PH);
            //攻击失败
            if(map.u[s.U.uid].PH > 0){
                map.u[s.U.uid].PH--;
                let sd = `[9,103,[${s.U.uid},${map.u[s.U.uid].PH}]]`;
                for(let k in map.u){
                    if(map.u[k].on) bs.sendUser(k, sd);
                }
            }
            checkGame();
            break;
        }case 44:{ //强制退出地图
            bs.RS(0).HDEL("USER", s.U.uid);
            break;
        }default:{
            /**
             * 98 玩家退出(close.js)
             * 99 游戏结束
             */
            LOG.error("not msg", d);
        }
    }
}

/** 检查游戏是否结束 */
function checkGame(){
    const bs = require("../module/base");
    for(let mk in MAPLIST){
        let map = MAPLIST[mk];
        if(map.end) continue;
        let ft = 0,ct = 0;
        for(let k in map.u){
            if(map.u[k].t == 1 && map.u[k].PH > 0) ct = 1;
            if(map.u[k].t == 0 && map.u[k].PH > 0) ft = 1;
        }
        if(ft && ct) continue;
        let sd = `[9,99]`;
        for(let k in map.u){
            if(map.u[k].on) bs.sendUser(k, sd);
        }
        map.end = 1;
    }
}